Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update ipfs binary cache with upload support #10

Merged
merged 21 commits into from
Jun 11, 2020

Conversation

matthewbauer
Copy link
Collaborator

@matthewbauer matthewbauer commented Jun 10, 2020

POC of how upload support can work

This adds a post bool that can be used to POST content instead of GET
or PUT it.
need to use a multipart form to correctly insert the data. this
mirrors how curl -Ffile=asdf works.
This makes a number of changes:

- Use ipfs:// and ipns:// for URI, this is a proper URI and now
documented by ipfs
- Remove ipfs.hh, move everything into store
- Store daemonUri, which is the, replacing individual API settings
- Remove support for gateways
- Remove nar info cache - ipfs should do all of the caching for us
- Only retry getFile once - if it doesn’t work the ipfs daemon is
probably down
- Use /object/stat to check if file exists instead of cat
To check if IPFS daemon works, we need to do a test that should alway
work. In the future, we may want to have a min IPFS daemon that we
support, but for now any version will work.
This is okay for /ipns/ because we can always mutate it, but it’s a
hard error for ipfs.
This is really slow, but is useful to test things. It does a few API
calls to work:

- /api/v0/add : to add the new file
- /api/v0/object/patch/add-link : to insert the file into unixfs
- /api/v0/name/publish : to publish the new ipfs object to ipns

The last step is the slow part since we need to wait for it to clear.
unfortunately we don’t have a good way to handle this

for now, avoid rethrowing and just accept 500
@Ericson2314
Copy link
Member

I am using old-ipfs_binary_cache NixIPFS#2 so think we need a new develop branch.

this doesn’t wait for the final response, but updates ipns internally.
To avoid race conditions while doing /object/patch/add-link &
/name/publish, we need to lock some state. This adds a bool for
inProgressUpsert so that we can know when other threads are also
trying to publish to IPNS.
@matthewbauer
Copy link
Collaborator Author

added an ipfs-binary-cache-develop branch

@matthewbauer matthewbauer changed the base branch from old-ipfs_binary_cache to ipfs-binary-cache-develop June 10, 2020 16:42
@matthewbauer
Copy link
Collaborator Author

Setting offline=true in all ipfs calls speeds up IPNS a lot. I think that's probably the easiest way to deal with the slowness. I'm unsure how this effects the actual propagation of IPNS outside of localhost though.

@matthewbauer matthewbauer changed the base branch from ipfs-binary-cache-develop to ipfs-binary-cache-develop2 June 10, 2020 16:46
@Ericson2314 Ericson2314 reopened this Jun 10, 2020
@Ericson2314 Ericson2314 changed the base branch from ipfs-binary-cache-develop2 to ipfs-binary-cache-develop June 10, 2020 16:55
matthewbauer and others added 10 commits June 10, 2020 12:32
this is called at the end of a sequence of addToStores calls to tell
the store that it can now commit the data.
This uses the Sync primitive to store an ipfsPath that is written to
as we add stuff to IPNS. IPNS is still optional. When finished, we do
a publish on the ipnsPath.
It isn't very safe, so best to do it once right after the condition. If
only we had real pattern matching...
…load-sync

Update ipfs binary cache with upload support (sync version)
@Ericson2314 Ericson2314 merged commit efd8790 into ipfs-binary-cache-develop Jun 11, 2020
@Ericson2314 Ericson2314 deleted the ipfs-binary-cache-with-upload branch June 11, 2020 14:56
Ericson2314 pushed a commit that referenced this pull request Dec 23, 2020
This deadlocks ProgressBar, e.g.

  # nix run --impure --no-substitute --store '/tmp/nix2?store=/foo' --expr 'derivation { builder = /nix/store/zi90rxslsm4mlr46l2xws1rm94g7pk8p-busybox-1.31.1-x86_64-unknown-linux-musl/bin/busybox; }'

leads to

  Thread 1 (Thread 0x7ffff6126e80 (LWP 12250)):
  #0  0x00007ffff7215d62 in __lll_lock_wait () from /nix/store/9df65igwjmf2wbw0gbrrgair6piqjgmi-glibc-2.31/lib/libpthread.so.0
  #1  0x00007ffff720e721 in pthread_mutex_lock () from /nix/store/9df65igwjmf2wbw0gbrrgair6piqjgmi-glibc-2.31/lib/libpthread.so.0
  #2  0x00007ffff7ad17fa in __gthread_mutex_lock (__mutex=0x6c5448) at /nix/store/h31cy7jm6g7cfqbhc5pm4rf9c53i3qfb-gcc-9.3.0/include/c++/9.3.0/x86_64-unknown-linux-gnu/bits/gthr-default.h:749
  #3  std::mutex::lock (this=0x6c5448) at /nix/store/h31cy7jm6g7cfqbhc5pm4rf9c53i3qfb-gcc-9.3.0/include/c++/9.3.0/bits/std_mutex.h:100
  #4  std::unique_lock<std::mutex>::lock (this=0x7fffffff09a8, this=0x7fffffff09a8) at /nix/store/h31cy7jm6g7cfqbhc5pm4rf9c53i3qfb-gcc-9.3.0/include/c++/9.3.0/bits/unique_lock.h:141
  #5  std::unique_lock<std::mutex>::unique_lock (__m=..., this=0x7fffffff09a8) at /nix/store/h31cy7jm6g7cfqbhc5pm4rf9c53i3qfb-gcc-9.3.0/include/c++/9.3.0/bits/unique_lock.h:71
  #6  nix::Sync<nix::ProgressBar::State, std::mutex>::Lock::Lock (s=0x6c5448, this=0x7fffffff09a0) at src/libutil/sync.hh:45
  #7  nix::Sync<nix::ProgressBar::State, std::mutex>::lock (this=0x6c5448) at src/libutil/sync.hh:85
  #8  nix::ProgressBar::logEI (this=0x6c5440, ei=...) at src/libmain/progress-bar.cc:131
  #9  0x00007ffff7608cfd in nix::Logger::logEI (ei=..., lvl=nix::lvlError, this=0x6c5440) at src/libutil/logging.hh:88
  #10 nix::getCodeLines (errPos=...) at src/libutil/error.cc:66
  #11 0x00007ffff76073f2 in nix::showErrorInfo (out=..., einfo=..., showTrace=<optimized out>) at /nix/store/h31cy7jm6g7cfqbhc5pm4rf9c53i3qfb-gcc-9.3.0/include/c++/9.3.0/optional:897
  #12 0x00007ffff7ad19e7 in nix::ProgressBar::logEI (this=0x6c5440, ei=...) at src/libmain/progress-bar.cc:134
  #13 0x00007ffff7ab9d10 in nix::Logger::logEI (ei=..., lvl=nix::lvlError, this=0x6c5440) at src/libutil/logging.hh:88
  #14 nix::handleExceptions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void ()>) (programName="/home/eelco/Dev/nix/outputs/out/bin/nix", fun=...) at src/libmain/shared.cc:328
  #15 0x000000000046226b in main (argc=<optimized out>, argv=<optimized out>) at /nix/store/h31cy7jm6g7cfqbhc5pm4rf9c53i3qfb-gcc-9.3.0/include/c++/9.3.0/ext/new_allocator.h:80
Ericson2314 added a commit that referenced this pull request May 9, 2022
Ericson2314 added a commit that referenced this pull request Apr 8, 2024
Fix and test deleting when lower store references
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants